Java 26일 코스 - Day 2: 변수와 자료형

Day 2: 변수와 자료형

변수는 데이터를 저장하는 메모리 공간에 붙인 이름입니다. Java는 강타입(strongly typed) 언어이므로 변수를 선언할 때 반드시 자료형을 지정해야 합니다. 크게 기본형(primitive type) 8가지와 참조형(reference type)으로 나뉩니다.

기본 자료형 (Primitive Types)

Java의 8가지 기본 자료형은 메모리에 값 자체를 직접 저장합니다.

public class PrimitiveTypes {
    public static void main(String[] args) {
        // 정수형
        byte smallNum = 127;           // 1바이트, -128 ~ 127
        short mediumNum = 32000;       // 2바이트
        int number = 2_000_000_000;    // 4바이트 (가장 많이 사용)
        long bigNum = 9_000_000_000L;  // 8바이트, L 접미사 필수

        // 실수형
        float pi = 3.14f;             // 4바이트, f 접미사 필수
        double precise = 3.141592653; // 8바이트 (기본 실수형)

        // 문자형
        char letter = 'A';            // 2바이트, 유니코드
        char korean = '가';           // 한글도 가능

        // 논리형
        boolean isJavaFun = true;     // true 또는 false

        System.out.println("정수: " + number);
        System.out.println("실수: " + precise);
        System.out.println("문자: " + letter);
        System.out.println("논리: " + isJavaFun);
    }
}

변수 선언과 초기화

변수는 선언과 동시에 초기화할 수도 있고, 나중에 값을 대입할 수도 있습니다.

public class VariableExample {
    public static void main(String[] args) {
        // 선언과 동시에 초기화
        int age = 25;
        String name = "홍길동";

        // 선언 후 나중에 초기화
        double salary;
        salary = 3500.50;

        // 상수: final 키워드 사용 (값 변경 불가)
        final int MAX_SCORE = 100;
        final String COMPANY = "NITEU";
        // MAX_SCORE = 200; // 컴파일 에러!

        // var 키워드 (Java 10+): 타입 추론
        var message = "타입을 추론합니다"; // String으로 추론
        var count = 42;                    // int로 추론

        System.out.println(name + "의 나이: " + age);
        System.out.println("급여: " + salary);
        System.out.println("최대 점수: " + MAX_SCORE);
    }
}

참조 자료형과 String

참조형은 객체의 메모리 주소를 저장합니다. String은 가장 많이 사용되는 참조형입니다.

public class ReferenceTypeExample {
    public static void main(String[] args) {
        // String은 참조형이지만 특별 대우를 받음
        String greeting = "안녕하세요";
        String language = new String("Java");

        // 문자열 비교
        String a = "hello";
        String b = "hello";
        String c = new String("hello");

        System.out.println(a == b);       // true (같은 리터럴 풀)
        System.out.println(a == c);       // false (다른 객체)
        System.out.println(a.equals(c));  // true (내용 비교)

        // null: 참조형의 기본값 (아무 객체도 가리키지 않음)
        String empty = null;
        // empty.length(); // NullPointerException 발생!
    }
}

변수의 스코프

변수는 선언된 블록 {} 안에서만 유효합니다.

public class ScopeExample {
    // 클래스 변수 (static): 모든 인스턴스가 공유
    static int classVar = 10;

    // 인스턴스 변수: 객체마다 별도
    int instanceVar = 20;

    public static void main(String[] args) {
        // 지역 변수: 메서드 안에서만 유효
        int localVar = 30;

        {
            // 블록 변수: 이 블록 안에서만 유효
            int blockVar = 40;
            System.out.println(blockVar); // 사용 가능
        }
        // System.out.println(blockVar); // 컴파일 에러!

        System.out.println("클래스 변수: " + classVar);
        System.out.println("지역 변수: " + localVar);
    }
}

오늘의 연습문제

  1. 개인정보 저장: 이름(String), 나이(int), 키(double), 결혼여부(boolean)를 각각 변수에 저장하고 한 줄씩 출력하는 프로그램을 작성하세요.

  2. 자료형 크기 비교: Byte.MAX_VALUE, Short.MAX_VALUE, Integer.MAX_VALUE, Long.MAX_VALUE를 출력하여 각 정수 자료형의 최댓값을 비교하는 프로그램을 작성하세요.

  3. 문자열 동등성 실험: ==.equals()의 차이를 실험하세요. new String("test")로 만든 두 객체를 ==.equals()로 각각 비교한 결과를 출력하고, 왜 다른지 주석으로 설명하세요.

이 글이 도움이 되었나요?